今天MT数字资产和大家聊一聊区块链的核心技术密码学,区块链技术离不开密码学,可以说密码学是区块链系统的基石之一,我们先来了解一下。
这是以太坊黄皮书关于钱包(私钥、公钥、地址)的描述,仅仅 2 行文字。MT数字资产表示主要讲解私钥通过 ECDSA(椭圆曲线签名算法)推导出公钥,继而经过 Keccak 单向散列函数推导出地址。分解为 3 个步骤:
1. 创建随机私钥 (64 位 16 进制字符 / 256 比特 / 32 字节)
2. 从私钥推导出公钥 (128 位 16 进制字符 / 512 比特 / 64 字节)
3. 从公钥推导出地址 (40 位 16 进制字符 / 160 比特 / 20 字节)
这是从ethereumjs/keythereum中剥离出来的 JavaScript 代码,关于黄皮书上的公式的具体实现,仅仅 6 行代码。
这是一件很奇妙的事情,2 行文字,6 行代码承载着亿万级别的资产,但往往越简单,越奥妙。以上的 6 行代码,就已经囊括密码学中大多数技术,比如随机数生成器、非对称加密,单向散列函数等。
什么是随机数生成器?
随机数用于生成私钥,若随机数可以被预测或重现,则私钥就会立刻形同虚设。MT数字资产表示所以保证随机数拥有下列三项特征,至关重要:
1.随机性:不存在统计学偏差,完全杂乱的数列
2.不可预测性:不能从过去的数列推测下一个出现的数
3.不可重现性:除非将数列保存下来,否则不能重现相同的数列
软件本身是无法生成具有不可重现性的随机数,因为运行软件的计算机本身仅具备有限的内部状态。MT数字资产表示所以通过确定性的代码,在周期足够长的情况下,必然会出现相同的随机数。因此要生成具备不可重现性的随机数,需要从不确定的物理现象中获取信息,比如周围温度、环境噪音、鼠标移动,键盘输入间隔等。
在 Linux 内核中维护了一个熵(shāng)池用来收集来自设备驱动程序和其它来源的环境噪音。熵(entropy)是描述系统混乱无序程度的物理量,一个系统的熵越大则说明该系统的有序性越差,即不确定性越大。
所以在选择生成私钥的随机数方法时,需要选择满足密码学强度的随机数方法,MT数字资产举例:比如 Node 中的 crypto.randomBytes。当你调用 crypto.randomBytes(32) 方法时,它会等待熵池搜集足够的信息后,返回 64 位的随机数,即私钥。
编辑:(编辑:Admin)